/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upc.clase.demo.dao.impl;
import edu.upc.clase.demo.dao.ContendorDao;
import edu.upc.clase.demo.entity.Contendor;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;

/**
 *
 * @author Luis
 */
@Repository
public class ContendorDaoImpl extends SimpleJdbcDaoSupport implements ContendorDao{
        private static Logger log = LoggerFactory.getLogger(ContendorDaoImpl.class);
    /* IOC 
     *        Inversion Objetc Control.- El Framewerok decide que objeto va ser creado. 
     * DI
     *        Injeccion de Dependencia.- Sirve para validar y complementar la dependencias que necesito
     *                                  para poder realizar un proceso de consulta.
     * 
     */
    /*@Override --> Sirve para conversar con la Bd */
    @Autowired
    public ContendorDaoImpl(DataSource dataSource) {
        log.info("Asignando el dataSource");
        setDataSource(dataSource);
    }
    @Override
    public Integer insertar(Contendor contendor) {
        getJdbcTemplate().update(
                /*
CREATE  TABLE IF NOT EXISTS `ScrantonBd`.`contendor` (
  `idcontendor` INT NOT NULL AUTO_INCREMENT ,
  `nocontendor` VARCHAR(150) NULL ,
  `fltipo` CHAR NULL ,
  `noimagen` VARCHAR(150) NULL ,
  `txtexto` VARCHAR(200) NULL ,
  `qtelegido` INT NULL ,
  `fcregistro` DATE NULL ,
  `idestado` INT NOT NULL ,
  PRIMARY KEY (`idcontendor`) )
ENGINE = InnoDB;
                 */
                "insert into contendor (nocontendor,fltipo,noimagen,"
                + "txtexto,qtelegido,fcregistro,idestado) "
                + "values (?, ?, ?, ?, ?, ? , ?)",
                contendor.getNocontendor(), contendor.getFltipo(),contendor.getNoimagen(),
                contendor.getTxtexto(),contendor.getQtelegido(),new Date(),
                contendor.getIdestado());
        return getSimpleJdbcTemplate().queryForInt("select last_insert_id()");
    }

    @Override
    public void actualizar(Contendor contendor) {
        getJdbcTemplate().update(
                "update contendor set nocontendor = ?,fltipo = ?,noimagen = ?,"
                + "txtexto = ?,qtelegido = ?,"
                + "idestado = ? where idcontendor = ?",
                contendor.getNocontendor(), contendor.getFltipo(),contendor.getNoimagen(),
                contendor.getTxtexto(),contendor.getQtelegido()
                ,contendor.getIdestado(),contendor.getIdcontendor());
    }

    @Override
    public void eliminar(Contendor contendor) {
        getJdbcTemplate().update(
                "update contendor set idestado = 2 where idcontendor = ?", contendor.getIdcontendor());
    }

    @Override
    public Contendor buscar(Integer id) {
        try {
            return getSimpleJdbcTemplate().queryForObject(
                    "select idcontendor, nocontendor,fltipo, "
                    + "noimagen,txtexto,qtelegido,fcregistro,"
                    + "idestado from contendor where idcontendor=?",
                    new BeanPropertyRowMapper<Contendor>(Contendor.class),id);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    @Override
    public List<Contendor> buscarTodos() {
        return getSimpleJdbcTemplate().query(
                "select idcontendor, nocontendor,fltipo, "
                    + "noimagen,txtexto,qtelegido,fcregistro,"
                    + "idestado from contendor where idestado in(0,1)",
                new BeanPropertyRowMapper<Contendor>(Contendor.class));
    }

    @Override
    public Contendor buscar(String correo) {
        try {
            return getSimpleJdbcTemplate().queryForObject(
                    "select idcontendor, nocontendor,fltipo, "
                    + "noimagen,txtexto,qtelegido,fcregistro,"
                    + "idestado from contendor where correo=?",
                    new BeanPropertyRowMapper<Contendor>(Contendor.class), correo);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    @Override
    public List<Contendor> buscarPorNombre(String nombre) {
        try {
            Map<String,String> parametros = new HashMap<String,String>();
            parametros.put("nombre","%"+nombre+"%");
            return getSimpleJdbcTemplate().query(
                    "select * from contendor where nocontendor like :nombre",
                    new BeanPropertyRowMapper<Contendor>(Contendor.class),parametros);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    
}
